#pragma once
#include <QDialog>

#include "ui_SearchAndReplace.h"

class SearchAndReplace : public QDialog {
    Q_OBJECT
public:
    enum class SearchDir { LAST, NEXT };    // 查找方向，上一个 或 下一个
    enum class ReplaceType { ONCE, ALL };   // 替换方式， 一次替换 或 替换全部
    SearchAndReplace(QWidget* parent = nullptr);
    ~SearchAndReplace();

private:
    Ui_SearchAndReplace* ui;

private slots:
    // 查找替换界面中按钮的槽函数
    void on_LastPushButton_clicked();
    void on_NextPushButton_clicked();
    void on_ReplaceButton_clicked();
    void on_ReplaceAllButton_clicked();

signals:
    /********************************************************************************
     * @brief 查找替换界面中查找按钮发出的信号
     * @param  str 查找的字符串
     * @param  dir 查找的方向，上一个 or 下一个
     ********************************************************************************/
    void searchInfo(QString str, SearchDir dir);

    /********************************************************************************
     * @brief 查找替换界面中替换按钮发出的信号*
     * @param  sStr 要替换的源字符串
     * @param  rStr 要替换的目的字符串
     * @param  type 替换方式，一次替换 or 全部替换
     ********************************************************************************/
    void replaceInfo(QString sStr, QString rStr, ReplaceType type);

protected:
    /********************************************************************************
     * @brief 检测到查找Dialog显示的时候，清空两个LineEdit
     * @param  event
     ********************************************************************************/
    void showEvent(QShowEvent* event);
};
